/**
 * This file is part of JNotifyOSD.
 *
 * JNotifyOSD is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JNotifyOSD is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with JNotifyOSD. If not, see <http://www.gnu.org/licenses/>.
 */

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the WIN32_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// WIN32_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.

#include <jni.h>

#ifdef WIN32_EXPORTS
#define WIN32_API __declspec(dllexport)
#else
#define WIN32_API __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C" {  // only need to export C interface if
	// used by C++ source code
#endif

	//NotificationService API

	WIN32_API void Java_notifyosd_NativeNotificationService_nativeInit(
		JNIEnv* env, jobject obj, jstring app_name);

	WIN32_API void Java_notifyosd_NativeNotificationService_nativeUninit(JNIEnv* env, jobject obj);

	WIN32_API jboolean Java_notifyosd_NativeNotificationService_nativeIsInitted(JNIEnv* env, jobject obj);

	WIN32_API jobjectArray Java_notifyosd_NativeNotificationService_nativeGetServerCaps(JNIEnv* env, jobject obj);

	WIN32_API jobjectArray Java_notifyosd_NativeNotificationService_nativeGetServerInfo(JNIEnv* env, jobject obj);

	WIN32_API jstring Java_notifyosd_NativeNotificationService_nativeGetAppName(JNIEnv* env, jobject obj);

	//Notification API

	WIN32_API void Java_notifyosd_NativeNotification_nativeInit(
		JNIEnv* env,
		jobject obj,
		jstring summary,
		jstring body,
		jstring icon);

	WIN32_API void Java_notifyosd_NativeNotification_nativeDestroy(JNIEnv* env, jobject obj);

	WIN32_API void Java_notifyosd_NativeNotification_nativeUpdate(
		JNIEnv* env,
		jobject obj,
		jstring summary,
		jstring body,
		jstring icon);

	WIN32_API void Java_notifyosd_NativeNotification_nativeShow(JNIEnv* env, jobject obj);

	WIN32_API void Java_notifyosd_NativeNotification_nativeSetTimeout(
		JNIEnv* env, jobject obj, jint timeout);

	WIN32_API void Java_notifyosd_NativeNotification_nativeSetCategory(
		JNIEnv* env, jobject obj, jstring category);

	WIN32_API jint Java_notifyosd_NativeNotification_getLowPrio(JNIEnv* env, jobject obj);

	WIN32_API jint Java_notifyosd_NativeNotification_getNorPrio(JNIEnv* env, jobject obj);

	WIN32_API jint Java_notifyosd_NativeNotification_getCriPrio(JNIEnv* env, jobject obj);

	WIN32_API void Java_notifyosd_NativeNotification_nativeSetUrgency(
		JNIEnv* env, jobject obj, jint urgency);

	WIN32_API void Java_notifyosd_NativeNotification_nativeHide(
		JNIEnv* env, jobject obj);

#ifdef __cplusplus
}
#endif